package xyz.jfshare.netty.study.client.handler;

import com.alibaba.fastjson.JSON;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import xyz.jfshare.netty.study.client.pojo.Message;
import xyz.jfshare.netty.study.client.util.MenuUtil;
import xyz.jfshare.netty.study.client.config.Config;
import xyz.jfshare.netty.study.client.pojo.User;

import java.util.List;

public class ChatClientHandler extends SimpleChannelInboundHandler<String> {
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
//        System.out.println(msg);
        //是否为命令
        if (msg.startsWith(Config.COMMAND_PREFIX)) {
            msg = msg.replace(Config.COMMAND_PREFIX, "").trim();
            //是否为登录命令
            if (msg.startsWith(Config.LOGIN_COMMAND)) {
                msg = msg.replace(Config.LOGIN_COMMAND, "").trim();
                MenuUtil.setLoginSuccess(msg);
            //是否为注册命令
            }else if (msg.startsWith(Config.REGISTER_COMMAND)) {
                msg = msg.replace(Config.REGISTER_COMMAND, "").trim();
                MenuUtil.setRegisterSuccess(msg);
            //是否为获取系统消息命令
            }else if (msg.startsWith(Config.GET_SYSTEM_MSG_COMMAND)){
                msg = msg.replace(Config.GET_SYSTEM_MSG_COMMAND, "").trim();
                //如果截取后为null，不做处理
                if (!msg.equals("null")){
                    //否则将json转换为List并添加到MenuUtil中的notFriend
                    List<Message> list = JSON.parseArray(msg, Message.class);
                    for (Message message : list) {
                        MenuUtil.addSystemMsg(message);
                    }
                }
            //是否为获取陌生人列表命令
            }else if (msg.startsWith(Config.SHOW_NOT_FRIEND_COMMAND)){
                //截取show not friend->
                msg = msg.replace(Config.SHOW_NOT_FRIEND_COMMAND,"").trim();
                //如果截取后为null，不做处理
                if (!msg.equals("null")){
                    //否则将json转换为List并添加到MenuUtil中的notFriend
                    List<User> list = JSON.parseArray(msg, User.class);
                    for (User user : list) {
                        MenuUtil.addNotFriends(user);
                    }
                }
            //是否为获取聊天记录命令
            }else if (msg.startsWith(Config.GET_USER_MSG_COMMAND)){
                //截取show friend->
                msg = msg.replace(Config.GET_USER_MSG_COMMAND,"").trim();
                //如果截取后为null，不做处理
                if (!msg.equals("null")){
                    //否则将json转换为List并添加到MenuUtil中的friend
                    List<Message> list = JSON.parseArray(msg, Message.class);

                    for (Message message : list) {
                        MenuUtil.addUserMsg(message);
                    }
                }
            //是否为获取好友列表命令
            }else if (msg.startsWith(Config.SHOW_FRIEND_COMMAND)){
                //截取show friend->
                msg = msg.replace(Config.SHOW_FRIEND_COMMAND,"").trim();
                //如果截取后为null，不做处理
                if (!msg.equals("null")){
                    //否则将json转换为List并添加到MenuUtil中的friend
                    List<User> list = JSON.parseArray(msg, User.class);
                    for (User user : list) {
                        MenuUtil.addFriends(user);
                    }
                }
            }
        //是否为消息
        }else if (msg.startsWith(Config.MESSAGE_PREFIX)){
            //截取Message==>后打印
            msg = msg.replace(Config.MESSAGE_PREFIX,"").trim();
            System.out.println(msg);
        }
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        cause.printStackTrace();
        ctx.close();
    }
}
